Sets the data in of an element in the struct.
DllStructSetData ( Struct, Element, value [, index ] )
Parameters
Struct | The struct returned by DllStructCreate. |
Element | Which element of the struct you want to access, starting at 1 or the elementname as defifined in DllStructCreate. |
value | The new value to place in the struct. |
index | If the element is an array, you need to specify which index to set, otherwise it sets index 1. The first element is 1. |
Return Value
Success: | value, which is read back from the struct. |
Failure: | 0. |
@Error: | 0 = No Error. |
1 = Struct not a correct struct returned by DllStructCreate. | |
2 = Element value out of range. | |
3 = index would be outside of the struct. | |
4 = Element data type is unknown | |
5 = index <= 0. |
Remarks
When the element is char[n], byte[n] or ubyte[n] the data can be a string otherwise it has to be a number.
Related
DllCall, DllStructCreate, DllStructGetData
Example
;=========================================================
; Create the struct
; struct {
; int var1;
; unsigned char var2;
; unsigned int var3;
; char var4[128];
; }
;=========================================================
$str = "int;ubyte;uint;char[128]"
$a = DllStructCreate($str)
if @error Then
MsgBox(0,"","Error in DllStructCreate " & @error);
exit
endif
;=========================================================
; Set data in the struct
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 will be typecasted to (unsigned int)
; strcpy(struct.var4,"Hello");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a,1,-1)
DllStructSetData($a,2,255)
DllStructSetData($a,3,-1)
DllStructSetData($a,4,"Hello")
DllStructSetData($a,4,Asc("h"),1)
;=========================================================
; Display info in the struct
;=========================================================
MsgBox(0,"DllStruct","Struct Size: " & DllStructGetSize($a) & @CRLF & _
"Struct pointer: " & DllStructGetPtr($a) & @CRLF & _
"Data:" & @CRLF & _
DllStructGetData($a,1) & @CRLF & _
DllStructGetData($a,2) & @CRLF & _
DllStructGetData($a,3) & @CRLF & _
DllStructGetData($a,4))
;=========================================================
; Free the memory allocated for the struct
;=========================================================
$a = 0